clearvars;

% =========================================================================
% 生成1500幅点状结构图像，点的多少，点的大小，点的位置，点的强度都是变量
% =========================================================================

% create the computational grid
Nx = 534;  % number of grid points in the x (row) direction
Ny = 268;  % number of grid points in the y (column) direction

% create initial pressure distribution using makeDisc

num_images = 10; % 要生成的图像数量

for img_idx = 1 : num_images

    % create initial pressure distribution
    source.p0 = zeros(Nx, Ny); % 初始化压力分布为零矩阵

    %num_of_points = randi([1, 15], 1, 1);   % 点的个数是1到15之间的随机数
    num_of_points = 3;

    for point_idx = 1 : num_of_points
        % 随机生成每个点的位置
        %pos = [randi([50, Nx-20], 1, 1), randi([5, Ny-5], 1, 1)]; 
        pos = [494, 86 + (point_idx - 1) * 2 * 24];
        % 随机生成每个点的大小和强度
        %disc_radius = randi([2, 10], 1, 1); % 点的半径是2到10之间的随机数
        disc_radius = 12;
        disc_magnitude = randi([240, 255], 1, 1); % 点的强度是1到10之间的随机数[Pa]
        
        % 使用 makeDisc 函数生成点状结构
        disc = disc_magnitude * makeDisc(Nx, Ny, pos(1), pos(2), disc_radius);
        % 将点状结构叠加到初始压力分布上
        source.p0 = source.p0 + disc;
    end
    % smooth the initial pressure distribution and restore the magnitude
    source.p0 = smooth(source.p0, true);

    % =========================================================================
    % SAVE RESULTS，需要保存ground-truth图像
    % =========================================================================
    % 定义保存路径和文件名
    filename = sprintf('D:/points_initial_pressure_%04d.png', img_idx);
    
    % 将 source.p0 的数据范围缩放到 [0, 255] 以便于保存为图像
    scaled_p0 = mat2gray(source.p0);
    
    % 使用 imwrite 函数保存图像
    imwrite(uint8(scaled_p0 * 255), filename);
    
    % =========================================================================
    % VISUALISATION
    % =========================================================================
    % plot the initial pressure and sensor distribution
%     figure;
%     imagesc(scaled_p0);
%     colormap(getColorMap);    
end

